使用 Jenkins 部署 VictoriaMetrics

171次阅读
没有评论

共计 3504 个字符,预计需要花费 9 分钟才能阅读完成。

写在前面

没什么特殊之处,记录流程便于日后查阅。

实践

流程图如下:
使用 Jenkins 部署 VictoriaMetrics

关于如何在 Jenkins 中调用 Ansible,可参考:Jenkins 流水线中调用 Ansible

ansible playbook 编写

# 查看剧本目录结构
# tree victoria-metrics-single/
victoria-metrics-single/
├── hosts
├── Jenkinsfile
├── main.yml
└── roles
    └── victoria-metrics-single
        ├── files
        │   └── victoria-metrics.service
        └── tasks
            └── main.yml

4 directories, 5 files

主要配置文件分析:

  • main.yml​ :剧本入口
# cat main.yml 
---
# x86_64
- name: 部署 victoria-metrics 单节点版本
  hosts: victoria-metrics-single
  gather_facts: yes
  roles:
    - role: victoria-metrics-single
      when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "7" or
             ansible_facts['distribution'] == "Ubuntu" or ansible_facts['distribution'] == "Debian")
  become: yes
  vars:
    install_dir: "/usr/local/bin"
    config_dir: "/etc/victoriametrics"
    data_dir: "/var/lib/victoriametrics"

  • Jenkinsfile​:流水线配置
# cat Jenkinsfile 
pipeline {
    agent any

    options {
        ansiColor('xterm') // 控制台输出添加对标准 ANSI 转义序列(包括颜色)的支持。
    }

    environment {
        ANSIBLE_HOST_KEY_CHECKING = 'False'  // 全局禁用主机密钥检查
    }

    stages {
        stage('Run Ansible') {
            steps {
                sshagent(credentials: ['ansible-ssh-key']) {
                    ansiblePlaybook(
                        playbook: 'main.yml',
                        inventory: 'hosts',
                        colorized: true,
                        hostKeyChecking: false,
                        // 可选:添加额外变量
                        extraVars: [
                            'env': 'production'
                        ]
                    )
                }
            }
        }
    }

    post {
        always {
            cleanWs()  // 清理工作空间
        }
        success {
            echo 'Ansible playbook execution successful!'
        }
        failure {
            echo 'Ansible playbook execution failed!'
        }
    }
}

  • roles/victoria-metrics-single/tasks/main.yml​:ansible task

    每次会从 GitHub 下载最新版本执行安装

# cat roles/victoria-metrics-single/tasks/main.yml 
---
- name: 从 GitHub 获取 latest 版本信息
  delegate_to: localhost
  uri:
    url: https://api.github.com/repos/VictoriaMetrics/VictoriaMetrics/releases/latest
    return_content: yes
  register: github_response
  run_once: true

- name: 注册版本信息
  set_fact:
    vm_version: "{{ github_response.json.tag_name }}"

- name: 下载 VictoriaMetrics 单节点版本
  delegate_to: localhost
  get_url:
    url: "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/{{ vm_version }}/victoria-metrics-linux-amd64-v{{ vm_version[1:] }}.tar.gz"
    dest: "{{ role_path }}/files/victoria-metrics-linux-amd64-v{{ vm_version[1:] }}.tar.gz"
  run_once: true

- name: 解压缩 VictoriaMetrics 单节点版本
  delegate_to: localhost
  unarchive:
    src: "{{ role_path }}/files/victoria-metrics-linux-amd64-v{{ vm_version[1:] }}.tar.gz"
    dest: "{{ role_path }}/files/"
  run_once: true

- name: 创建 victoriametrics 组
  group:
    name: victoriametrics
    state: present
    system: true

- name: 创建 victoriametrics 用户
  user:
    name: victoriametrics
    group: victoriametrics
    shell: /usr/sbin/nologin
    system: true
    create_home: false

- name: 创建工作目录
  file:
    path: "{{ item }}"
    state: directory
    owner: victoriametrics
    group: victoriametrics
    mode: '0755'
  with_items:
    - "{{ config_dir }}"
    - "{{ data_dir }}"

- name: 下发二进制包
  copy:
    src: "{{ role_path }}/files//victoria-metrics-prod"
    dest: "{{ install_dir }}/victoria-metrics-prod"
    mode: '0755'
    owner: victoriametrics
    group: victoriametrics

- name: 下发 systemd 单元文件
  copy:
    src: victoria-metrics.service
    dest: /etc/systemd/system
    mode: '0755'

- name: 配置开机自启
  systemd:
    name: victoria-metrics
    state: started
    enabled: yes
    daemon_reload: yes

- name: 获取 VictoriaMetrics service 状态
  command: systemctl status victoria-metrics
  register: service_status
  changed_when: false  # 这个命令不会改变系统状态
  failed_when: false  # 即使服务未运行也不会导致任务失败

- name: 打印 VictoriaMetrics service 状态
  debug:
    msg: "{{ service_status.stdout_lines }}"

git 相关配置

GitLab 新建项目:victoria-metrics-single

使用 Jenkins 部署 VictoriaMetrics

创建访问凭证,此凭证需要存入到 jenkins 中,用于拉取项目。

设置 –> 仓库 –> 部署令牌

使用 Jenkins 部署 VictoriaMetrics

git 客户端命令:

cd victoria-metrics-single

# 忽略部分文件
cat > .gitignore << EOF
*.log
*.tmp
*.swp
.DS_Store
EOF

# 初始化、添加暂存区、配置远程仓库、提交、推送到分支
git init --initial-branch=master
git add .
git remote add origin ssh://git@***.opshub.cn/pengyinwei/victoria-metrics-single.git
git commit -m "Initial commit: Add victoria-metrics-single ansible role"
git push -u origin master

jenkins 配置

录入凭证:

系统管理 –> 凭据管理 –> 系统 –> 全局凭据 –> Add Credentials

使用 Jenkins 部署 VictoriaMetrics

创建新流水线任务:

使用 Jenkins 部署 VictoriaMetrics

触发构建

效果如下:

使用 Jenkins 部署 VictoriaMetrics

本文属于专题:Jenkins

引用链接

正文完
 1
pengyinwei
版权声明:本站原创文章,由 pengyinwei 2025-01-16发表,共计3504字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处:https://www.opshub.cn
评论(没有评论)